﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sispe.Entities;
using System.Data;
using System.Data.Objects;


namespace Sispe.Repository
{
    public class ProyectoRepository: MasterRepository, IProyectoRepository
    {

        public List<PROYECTO> GetAllFromProyectos()
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            ////ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosByDescripcion(string descripcion)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (descripcion != string.Empty)
            {

                query = from p in context.PROYECTOS.Include("CLIENTE").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(descripcion.ToUpper())
                            select p;
            }

            ////ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public PROYECTO GetFromProyectoById(int id)
        {
            var query = from p in context.PROYECTOS//.Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        where p.IdProyecto.Equals(id)
                        select p;

            return query.SingleOrDefault();
        }

        public void AddProyecto(PROYECTO proyecto)
        {
            foreach (var item in proyecto.PROYECTO_CONTACTO)
            {
                item.CONTACTO_PROYECTO = null;
                context.Entry(item).State = EntityState.Added;
            }

            context.Entry(proyecto.CLIENTE).State = EntityState.Unchanged;
            context.Entry(proyecto.UBICACION_PROYECTO).State = EntityState.Unchanged;

            context.PROYECTOS.Add(proyecto);
            context.SaveChanges();
        }

        public void UpdateProyecto(PROYECTO proyecto)
        {

            context.Entry(proyecto.CLIENTE).State = EntityState.Unchanged;
            context.Entry(proyecto.UBICACION_PROYECTO).State = EntityState.Unchanged;

            //context.Entry(proyecto.UBICACION_PROYECTO).State = EntityState.Detached;

            context.Entry(proyecto).State = System.Data.EntityState.Modified;

            foreach (var item in proyecto.PROYECTO_CONTACTO)
            {
                item.CONTACTO_PROYECTO = null;

                context.Entry(item).State = item.Id ==
                    Int32.Parse("0") ? EntityState.Added : EntityState.Modified;

                item.ContactoId = item.ContactoId;
            }

            
            //context.Entry(proyecto.PROYECTO_CONTACTO).State = EntityState.Unchanged;
            context.SaveChanges();
        }

        public void DeleteProyecto(int id)
        {
            var existe = context.PROYECTOS.Find(id);

            if (existe != null)
            {
                context.PROYECTOS.Remove(existe);
                context.SaveChanges();
            }
        }

        public bool ExisteDuplicidad(string nombreProyecto, string codigo, int id)
        {
            var query = from r in context.PROYECTOS
                        where (r.NombreProyecto.ToUpper().CompareTo(nombreProyecto.ToUpper()) == 0 || r.CodigoProyecto.ToUpper().CompareTo(codigo.ToUpper()) == 0) && r.IdProyecto != id
                        select r;
            return query.Any();
        }


        public bool GetFromProyectoByClienteById(int idProy)
        {
            var query = from s in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        where s.IdProyecto.Equals(idProy)
                        select s;
            return query.Any();
        }


        public PROYECTO GetFromProyectoByCodigo(string codigo)
        {
            var query = from ds in context.PROYECTOS
                        where ds.CodigoProyecto.Equals(codigo)
                        select ds;
            return query.SingleOrDefault();
        }


        public bool GetFromProyectoByUbicacionProyectoById(int idUbicacion)
        {
            var query = from s in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        where s.IdUbicacionProyecto.Equals(idUbicacion)
                        select s;
            return query.Any();
        }


        public List<PROYECTO> GetAllProyectosVigentes()
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        where p.FechaTermino >= System.DateTime.Now
                        select p;
            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllProyectosByCliente(string descripcion)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (descripcion != string.Empty)
            {

                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.CLIENTE.RazonSocial.ToUpper().Contains(descripcion.ToUpper())
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();

        }

        public List<PROYECTO> GetAllProyectosByUbicacion(string ubicacion)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (ubicacion != string.Empty)
            {

                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper())
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectoVigentessByDescripcion(string descripcion)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (descripcion != string.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(descripcion.ToUpper()) && p.FechaTermino >= System.DateTime.Now
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosVigentesByCliente(string descripcion)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (descripcion != string.Empty)
            {

                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.CLIENTE.RazonSocial.ToUpper().Contains(descripcion.ToUpper()) && p.FechaTermino >= System.DateTime.Now
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosVigentesByUbicacion(string ubicacion)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (ubicacion != string.Empty)
            {

                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper()) && p.FechaTermino >= System.DateTime.Now
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }


        public List<PROYECTO> GetAllFromProyectosByDescripcionByFecha(string descripcion, DateTime fecIni, DateTime fecFin)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (descripcion != string.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(descripcion.ToUpper()) && p.FechaInicio >= fecIni && p.FechaTermino <= fecFin
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosVigentesByFecha(DateTime fecIni, DateTime fecFin)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        where p.FechaTermino >= System.DateTime.Now && p.FechaInicio >= fecIni && p.FechaTermino <= fecFin
                        select p;
            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosByClienteByFecha(string descripcion, DateTime fecIni, DateTime fecFin)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (descripcion != string.Empty)
            {

                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.CLIENTE.RazonSocial.ToUpper().Contains(descripcion.ToUpper()) && p.FechaInicio >= fecIni && p.FechaTermino <= fecFin
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosByUbicacionByFecha(string ubicacion, DateTime fecIni, DateTime fecFin)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (ubicacion != string.Empty)
            {

                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper()) && p.FechaInicio >= fecIni && p.FechaTermino <= fecFin
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectoVigentessByDescripcionByFecha(string descripcion, DateTime fecIni, DateTime fecFin)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (descripcion != string.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(descripcion.ToUpper()) && p.FechaTermino >= System.DateTime.Now && p.FechaInicio >= fecIni && p.FechaTermino <= fecFin
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosVigentesByClienteByFecha(string descripcion, DateTime fecIni, DateTime fecFin)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (descripcion != string.Empty)
            {

                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.CLIENTE.RazonSocial.ToUpper().Contains(descripcion.ToUpper()) && p.FechaTermino >= System.DateTime.Now && p.FechaInicio >= fecIni && p.FechaTermino <= fecFin
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosVigentesByUbicacionByFecha(string ubicacion, DateTime fecIni, DateTime fecFin)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (ubicacion != string.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper()) && p.FechaTermino >= System.DateTime.Now && p.FechaInicio >= fecIni && p.FechaTermino <= fecFin
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }


        public List<PROYECTO> GetAllFromProyectosByFecha(DateTime fecIni, DateTime fecFin)
        {

            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        where p.FechaInicio >= fecIni && p.FechaTermino <= fecFin
                        select p;
            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }


        public List<PROYECTO> GetAllFromProyectoByNombreByCliente(string proyecto, string cliente)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (proyecto != string.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(proyecto.ToUpper()) && p.CLIENTE.RazonSocial.ToUpper().Contains(cliente.ToUpper())
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectoByNombreByClienteByFecha(string proyecto, string cliente, DateTime fecIni, DateTime fecFin)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (proyecto != string.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(proyecto.ToUpper()) && p.CLIENTE.RazonSocial.ToUpper().Contains(cliente.ToUpper()) && p.FechaInicio >= fecIni && p.FechaTermino <= fecFin
                            select p;
                //ObjectContext.Refresh(RefreshMode.StoreWins, query);
                return query.ToList();
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }


        //
        public List<PROYECTO> GetAllFromProyectoByNombreByUbicacion(string proyecto, string ubicacion)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (proyecto != string.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(proyecto.ToUpper()) && p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper())
                            select p;

            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectoByNombreByUbicacionByFecha(string proyecto, string ubicacion, DateTime fecIni, DateTime fecFin)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (proyecto != string.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(proyecto.ToUpper()) && p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper())
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectoByNombreByClienteBYUbicacion(string proyecto, string cliente, string ubicacion)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (proyecto != string.Empty)
            {
               query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(proyecto.ToUpper()) && p.CLIENTE.RazonSocial.ToUpper().Contains(cliente.ToUpper()) && p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper())
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectoByNombreByClienteBYUbicacionByFecha(string proyecto, string cliente, string ubicacion, DateTime fecIni, DateTime fecFin)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (proyecto != string.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(proyecto.ToUpper()) && p.CLIENTE.RazonSocial.ToUpper().Contains(cliente.ToUpper()) && p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper()) && p.FechaInicio >= fecIni && p.FechaTermino <= fecFin
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosVigentesByNombreByCliente(string proyecto, string cliente)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (proyecto != string.Empty)
            {
               query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(proyecto.ToUpper()) && p.CLIENTE.RazonSocial.ToUpper().Contains(cliente.ToUpper()) && p.FechaTermino >= System.DateTime.Now
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosVigentesByNombreByClienteByFecha(string proyecto, string cliente, DateTime fecIni, DateTime fecFin)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (proyecto != string.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(proyecto.ToUpper()) && p.CLIENTE.RazonSocial.ToUpper().Contains(cliente.ToUpper()) && p.FechaInicio >= fecIni && p.FechaTermino <= fecFin && p.FechaTermino >= System.DateTime.Now
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosVigentesByNombreByUbicacion(string proyecto, string ubicacion)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (proyecto != string.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(proyecto.ToUpper()) && p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper()) && p.FechaTermino >= System.DateTime.Now
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosVigentesByNombreByUbicacionByFecha(string proyecto, string ubicacion, DateTime fecIni, DateTime fecFin)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (proyecto != string.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(proyecto.ToUpper()) && p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper()) && p.FechaInicio >= fecIni && p.FechaTermino <= fecFin && p.FechaTermino >= System.DateTime.Now
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectsVigentesoByNombreByClienteBYUbicacion(string proyecto, string cliente, string ubicacion)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (proyecto != string.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(proyecto.ToUpper()) && p.CLIENTE.RazonSocial.ToUpper().Contains(cliente.ToUpper()) && p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper()) && p.FechaTermino >= System.DateTime.Now
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosVigentesByNombreByClienteBYUbicacionByFecha(string proyecto, string cliente, string ubicacion, DateTime fecIni, DateTime fecFin)
        {

            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (proyecto != string.Empty)
            {
               query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.NombreProyecto.ToUpper().Contains(proyecto.ToUpper()) && p.CLIENTE.RazonSocial.ToUpper().Contains(cliente.ToUpper()) && p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper()) && p.FechaInicio >= fecIni && p.FechaTermino <= fecFin && p.FechaTermino >= System.DateTime.Now
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }


        public List<PROYECTO> GetAllFromProyectosByCLienteByUbicacion(string cliente, string ubicacion)
        {

            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (cliente != string.Empty && ubicacion != String.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.CLIENTE.RazonSocial.ToUpper().Contains(cliente.ToUpper()) && p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper()) 
                            select p;
            }

            ////ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosByCLienteByUbicacionByFecha(string cliente, string ubicacion, DateTime fecIni, DateTime fecFin)
        {

            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (cliente != string.Empty && ubicacion != String.Empty)
            {
                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.CLIENTE.RazonSocial.ToUpper().Contains(cliente.ToUpper()) && p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper()) && p.FechaInicio >= fecIni && p.FechaTermino <= fecFin
                            select p;
            }

            //ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public List<PROYECTO> GetAllFromProyectosVigentesByCLienteByUbicacion(string cliente, string ubicacion)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;
            if (cliente != string.Empty && ubicacion != String.Empty)
            {
               query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                            where p.CLIENTE.RazonSocial.ToUpper().Contains(cliente.ToUpper()) && p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper()) && p.FechaTermino >= System.DateTime.Now
                            select p;

            }
                //ObjectContext.Refresh(RefreshMode.StoreWins, query);
                return query.ToList();
            
        }


        public List<PROYECTO> GetAllFromProyectosVigentesByCLienteByUbicacionByFecha(string cliente, string ubicacion, DateTime fecIni, DateTime fecFin)
        {
            var query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        select p;

            if (cliente != string.Empty && ubicacion != String.Empty)
            {

                query = from p in context.PROYECTOS.Include("CLIENTE").Include("UBICACION_PROYECTO").Include("PROYECTO_CONTACTO.CONTACTO_PROYECTO")
                        where p.CLIENTE.RazonSocial.ToUpper().Contains(cliente.ToUpper()) && p.UBICACION_PROYECTO.Descripcion.ToUpper().Contains(ubicacion.ToUpper()) && p.FechaInicio >= fecIni && p.FechaTermino <= fecFin && p.FechaTermino >= System.DateTime.Now
                        select p;
            }
                //ObjectContext.Refresh(RefreshMode.StoreWins, query);
                return query.ToList();


        }
    }
}
